package JavaSE.TCPUDPLearning.OneToOne;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
// 发送端
public class SendTaskImpl implements Runnable {
    DatagramSocket socket;
    String IPAddress;
    int port;

    public SendTaskImpl(DatagramSocket socket, String IPAddress, int port) {
        this.socket = socket;
        this.IPAddress = IPAddress;
        this.port = port;
    }

    public void sendMessage() throws IOException {
        // 来自应用层的数据
        // 创建一个缓冲输入流 读取一行数据
        BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in));

        // DatagramSocket(int port)
        // 创建数据报套接字并将其绑定到本地主机上的指定端口。
        //socket = new DatagramSocket(port);

        String s;
        while ((s = br.readLine()) != null) {
            sendData(s);
            if (s.equals("88")) {
                break;
            }
        }
        // 关闭资源
        socket.close();
    }

    public void sendData(String s) throws IOException {
        // 把字符串数据封装成数据报包
        byte[] bytes = s.getBytes();
        // 创建目标ip地址
        InetAddress targetIp = InetAddress.getByName(this.IPAddress);

        // 定义端口号
        // 创建数据报包
        DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, targetIp, port);

        // 发送数据报包
        // send(DatagramPacket p)
        // 从此套接字发送数据报包。
        socket.send(packet);
    }

    @Override
    public void run() {
        try {
            sendMessage();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
